using System; 
using System.IO; 
using Engine; 
using Game; 
using Game.NetWork; 
using Game.NetWork.Packages;
using Newtonsoft.Json; 

namespace YS 
{
    public class YS_zdyTP 
    {
        // 方法：设置传送点
        public string YS_set(ComponentPlayer componentPlayer, string[] m_messageDatas)
        {
            // 默认返回信息
            string result = "\n/ys set(1/2/3)  -保存坐标";

            // 获取玩家的GUID和名称
            string text = componentPlayer.PlayerData.PlayerGUID.ToString();
            string text2 = componentPlayer.PlayerData.Name.Replace("\r", "").Replace("\n", "");

            // 获取玩家的当前位置
            Vector3 position = componentPlayer.ComponentBody.Position;

            // 检查命令参数是否正确
            if (m_messageDatas.Length != 3)
            {
                return result; // 如果参数不正确，返回默认信息
            }

            // 检查传送点编号是否合法
            if (m_messageDatas[2] != "1" && m_messageDatas[2] != "2" && m_messageDatas[2] != "3")
            {
                return result; // 如果编号不合法，返回默认信息
            }

            // 获取玩家的当前坐标
            float x = position.X;
            float y = position.Y;
            float z = position.Z;

            // 创建一个匿名对象，用于存储传送点信息
            var value = new
            {
                Name = text2, // 玩家名称
                x = x, // X坐标
                y = y, // Y坐标
                z = z  // Z坐标
            };

            // 定义存储路径
            string text3 = "MyPlayData/" + text;
            if (!Directory.Exists(text3))
            {
                Directory.CreateDirectory(text3); // 如果目录不存在，则创建
            }

            // 定义文件路径
            string path = text3 + "/(" + m_messageDatas[2] + ")" + text2 + ".json";

            // 将传送点信息序列化为JSON格式
            string contents = JsonConvert.SerializeObject(value, Formatting.Indented);

            // 将JSON数据写入文件
            File.WriteAllText(path, contents);

            // 返回成功信息
            return "已保存该坐标至 传送点 " + m_messageDatas[2] + "  坐标 " + x.ToString("F1") + "," + y.ToString("F1") + "," + z.ToString("F1");
        }

        // 方法：读取传送点或传送到传送点
        public string YS_read_go(ComponentPlayer componentPlayer, string[] m_messageDatas, int change, bool wudiover)
        {
            // 初始化坐标变量
            float num = 0f;
            float num2 = 0f;
            float num3 = 0f;

            // 默认返回信息
            string result = "\n/ys read  -查看保存坐标(1/2/3)";

            // 获取玩家的GUID和名称
            string text = componentPlayer.PlayerData.PlayerGUID.ToString();
            string text2 = componentPlayer.PlayerData.Name.Replace("\r", "").Replace("\n", "");

            // 检查命令参数是否正确
            if (m_messageDatas.Length != 3)
            {
                return result; // 如果参数不正确，返回默认信息
            }

            // 检查传送点编号是否合法
            if (m_messageDatas[2] != "1" && m_messageDatas[2] != "2" && m_messageDatas[2] != "3")
            {
                return result; // 如果编号不合法，返回默认信息
            }

            // 定义存储路径
            string text3 = "MyPlayData/" + text;
            if (!Directory.Exists(text3))
            {
                Directory.CreateDirectory(text3); // 如果目录不存在，则创建
            }

            // 定义文件路径
            text3 = text3 + "/(" + m_messageDatas[2] + ")" + text2 + ".json";

            // 读取文件内容
            string value;
            try
            {
                value = File.ReadAllText(text3);
            }
            catch (Exception)
            {
                return "你还没有使用/ys set(1/2/3) 指令"; // 如果文件不存在或读取失败，返回提示信息
            }

            // 反序列化JSON数据
            playYSData playYSData = JsonConvert.DeserializeObject<playYSData>(value);
            if (playYSData == null)
            {
                return "数据读取失败，请检查传送点数据"; // 如果反序列化失败，返回错误信息
            }

            // 获取传送点坐标
            num = playYSData.X;
            num2 = playYSData.Y;
            num3 = playYSData.Z;

            // 根据change参数决定是查看传送点还是传送到传送点
            switch (change)
            {
                case 1: // 查看传送点
                    result = "你保存的 传送点  " + m_messageDatas[2] + "  的坐标是 " + num.ToString("F1") + "," + num2.ToString("F1") + "," + num3.ToString("F1");
                    break;
                case 0: // 传送到传送点
                    {
                        // 创建目标位置
                        Vector3 position = new Vector3(num, num2, num3);
                        // 更新玩家位置
                        componentPlayer.ComponentBody.Position = position;
                        // 发送位置更新的网络包
                        CommonLib.Net.QueuePackage(new ComponentPlayerPackage(componentPlayer, ComponentPlayerPackage.PlayerAction.PositionSet));
                        // 返回成功信息
                        result = "你成功传送到 传送点  " + m_messageDatas[2] + "  的坐标是 " + num.ToString("F1") + "," + num2.ToString("F1") + "," + num3.ToString("F1") + "canWuDi";
                        break;
                    }
            }

            return result; // 返回最终结果
        }
    }
}

// 定义用于反序列化的数据结构
public class playYSData
{
    public string Name { get; set; } // 玩家名称
    public float X { get; set; } // X坐标
    public float Y { get; set; } // Y坐标
    public float Z { get; set; } // Z坐标
}